BOJ_1806_부분합

투 포인터(Two-Pointers)를 사용해서 연속된 수들의 최소 개수 부분합을 구하는 문제

두 포인터를 0에 위치시킨 후, sum이 S보다 크거나 같으면 left를 당기면서 조건을 만족하는 최소 수열을 구한다

sum이 S보다 작아지면 직전 숫자를 포함한 현재 길이 + 1 와 min_range를 비교해 최솟값을 갱신한다

import sys  
  
N, S = list(map(int, input().split()))  
nums = list(map(int, input().split()))  
  
left = 0  
right = 0  
sum = nums[0]  
min_range = sys.maxsize  
  
while True:  
    if sum >= S:  
        while sum >= S:  
            sum -= nums[left]  
            left += 1  
  
        min_range = min(min_range, right - left + 2)  
  
        if min_range == 1:  
            break  
  
    else:  
        if right < N - 1:  
            right += 1  
            sum += nums[right]  
  
        else:  
            break  
  
print(min_range if min_range < sys.maxsize else 0)